package com.erp.interceptors;

import java.util.List;

import com.erp.dto.Privilege;
import com.erp.dto.User;
import com.erp.util.PrivilegeUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

@SuppressWarnings("serial")
public class CheckPrivilegeInterceptor extends AbstractInterceptor {

	@SuppressWarnings("unchecked")
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {

		// 获取当前登录用户
		User user = (User) invocation.getInvocationContext().getSession()
				.get("user");
		String namespace = invocation.getProxy().getNamespace().trim();
		String actionName = invocation.getProxy().getActionName().trim();

		String url = "";
		if (namespace.endsWith("/")) {
			// 如果不是根路径，需要加反斜杠
			url = namespace + actionName;
		} else {
			url = namespace + "/" + actionName;
		}
		if (url.startsWith("/")) {
			url = url.substring(1);
		}

		// 未登录
		if (user == null) {
			// 如果请求的不是登录页面或登录操作，返回登陆页面
			//*******若首次初始化数据库可先注释此段代码**********
			if (!url.startsWith("user_login")) {
				return "loginPage";
			}
			//*****************
		}
		// 已登录
		else {
			// 如果没有权限，转到警告页面
			if (!PrivilegeUtil.isValid(url, (List<Privilege>) ActionContext
					.getContext().getSession().get("userPrivilegeList"),
					(List<Privilege>) ActionContext.getContext()
							.getApplication().get("privilegeList"))) {
				return "noPrivilegePage";
			}
		}
		return invocation.invoke();
	}

}
